使用公式创建包含字符串的计算列

3
我想在SQL SERVER中创建一个计算列,并将公式设置为以下内容:
([Category] +  '.aspx?ID=' + [Post_ID])

不起作用......我缺失什么?

“分类”和“文章ID”是表格中的当前列。

3个回答

3

Do you do

SELECT [Category] +  '.aspx?ID=' + [Post_ID]
FROM table

请尝试

SELECT CAST([Category] AS NVARCHAR(MAX)) + '.aspx?ID=' CAST([Post_ID] AS NVARCHAR(MAX))
FROM table

或者根据您的列数据类型指定最大大小。


上面的答案不好。不要在数据层进行格式化,应该在表示层即标记语言中进行格式化。例如:

<asp:HyperLinkField
    HeaderText="LinkHeader"
    DataNavigateUrlFormatString="{0}.aspx?ID={1}" 
    DataNavigateUrlFields="Category,Post_ID"
    DataTextField="LinkName" />

为了使其正常工作,这还需要在结果选择中存在一个名为LinkName的字段。
或者。
<asp:Hyperlink runat= "server"
    Text='<%# DataBinder.Eval(Container.DataItem, "LinkName").ToString() %>' 
    NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "Category").ToString() + ".aspx?ID=" + DataBinder.Eval(Container.DataItem, "Post_ID").ToString() />   

我该如何在此处实现它:NavigateUrl='<%#Eval("Post_ID", ".aspx?ID={0}")%>'> - Etienne
1
@Etienne:请参见https://dev59.com/CHI-5IYBdhLWcg3wlpeW。 - abatishchev

1

我猜你可能缺少了一个类型转换。虽然我同意这似乎不太可能成为计算列的候选项。

create table #t
(
Category varchar(50),
[Post_ID] int
)

alter table #t 
add comp as ([Category] +  '.aspx?ID=' + cast([Post_ID] as varchar(10)))

1
我认为创建这样的计算列是一个不好的想法,更好的做法是在呈现层上即时格式化数据。 - abatishchev
1
@abatishchev 我也想不出任何情况下这一列会是一个好主意。 - Martin Smith

0

最后这真的解决了我的问题.....

NavigateUrl='<%# String.Format("{0}.aspx?ID={1}", DataBinder.Eval(Container.DataItem, "Category"), DataBinder.Eval(Container.DataItem, "Post_ID")) %>'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接