在公式中使用字符串创建计算列

时间:2010-10-23 10:25:20

标签: asp.net sql sql-server sql-server-2005 tsql

我想在SQL SERVER中创建一个计算列,并将公式设置为此

([Category] +  '.aspx?ID=' + [Post_ID])

虽然没有工作......我错过了什么?

Category和Post_ID是表格中的当前列

3 个答案:

答案 0 :(得分:3)

你做

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

尝试

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

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


以上回答很糟糕。不要在数据层上格式化。在演示层上的格式,即在标记中。 E.g:

<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() />   

答案 1 :(得分: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)))

答案 2 :(得分:0)

这实际上最终为我排序了......

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